/**
 * Created by wupan on 2016/10/21.
 */
package com.buss.service.base;

import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 通用接口
 */
@Service
public interface IBaseService<T> {

    /**
     * 说明：根据实体中的属性值进行查询，查询条件使用等号
     */
    List<T> select(T record);

    /**
     * 说明：根据主键字段进行查询，方法参数必须包含完整的主键属性，查询条件使用等号
     */
    T selectByPrimaryKey(Object key);

    /**
     * 说明：根据Example条件进行查询
     * 重点：这个查询支持通过Example类指定查询列，通过selectProperties方法指定查询列
     */
    List<T> selectByExample(Object example);

    /**
     * 说明：根据Example条件进行查询，配合PageHelper实现物理分页
     */
    List<T> selectByExample2Page(Object example, int page, int rows);

    /**
     * 说明：根据实体中的属性查询总数，查询条件使用等号
     */
    int selectCount(T record);

    /**
     * 说明：保存一个实体，null的属性也会保存，不会使用数据库默认值
     */
    int insert(T entity);

    /**
     * 说明：根据主键更新实体全部字段，null值会被更新
     */
    int updateByPrimaryKey(T entity);

    /**
     * 说明：根据主键字段进行删除，方法参数必须包含完整的主键属性
     */
    int deleteByPrimaryKey(Object key);

    /**
     * 说明：根据主键更新属性不为null的值
     */
    int updateByPrimaryKeySelective(T entity);

    //TODO 其他...
}
